test.o
如果有任何变化,是否会再次建造bar.h
?
没有.Make无法知道这种依赖关系,也无法检查你#include
的变化.
除此之外,当然,如果你离开处理头依赖于谁的实体知道关于他们:编译器.(假设在此示例中使用GCC和GNU.)
作为依赖没有列出标题,在所有.
生成项目中的源文件列表.
SRCFILES := ...
生成依赖项文件列表,.d
每个文件一个文件SRCFILE
.
DEPFILES := $(patsubst %.cpp,%.d,$(SRCFILES))
将这些依赖项文件包含在Makefile中.(-
如果不存在,则主要方式Make不会生成错误,例如在第一次编译时.)
-include $(DEPFILES)
使用通用规则,让编译器在编译每个源文件期间生成标头依赖项列表.
%.o: %.cpp Makefile
@$(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@
-MMD
生成制定规则,使目标文件依赖于包含的任何(非系统)头文件,命名*.d
.-MP
添加虚拟规则,以避免从源文件中删除头文件时出错.